#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp> // 引入boost.asio网络编程库

using boost::asio::ip::tcp;

// 生成当前时间字符串的函数
std::string make_daytime_string()
{
    using namespace std; // 使用std命名空间以便使用time_t, time和ctime
    time_t now = time(0);
    return ctime(&now);
}

int main()
{
    try
    {
        // 创建IO上下文对象，用于异步操作
        boost::asio::io_context io_context;

        // 创建接受器，监听IPv4的13端口（标准时间服务端口）
        tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 13133));

        // 无限循环，持续接受新的连接
        for (;;)
        {
            // 为新连接创建socket对象
            tcp::socket socket(io_context);
            // 记录连接创建日志
            std::cout << "新的连接创建于: " << make_daytime_string();

            // 等待并接受新的连接 当没有新连接时就会阻塞
            // 有新连接时 就会继续往下走
            acceptor.accept(socket);

            // 获取当前时间字符串
            std::string message = make_daytime_string();

            // 向客户端发送时间信息
            // ignored_error用于处理写入操作可能发生的错误，但在这里被忽略
            boost::system::error_code ignored_error;
            boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
        }
    }
    // 捕获并处理可能发生的异常
    catch (std::exception &e)
    {
        std::cerr << e.what() << std::endl;
    }

    return 0;
}